package com.shuang.hash4;

import java.util.HashMap;
import java.util.Map;

public class TwoSum {
    public int[] twoSum(int[] nums, int target) {
        //不仅要在数组中找到所需要的两个整数还要找到整数所对应的下标 相同元素不能使用两次 所以用到map集合

        //方法一：
        // //用于存放两个数索引的结果
        // int[] res = new int[2];

        // //判断
        // if (nums == null || nums.length == 0) {
        //     return res;
        // }

        // //定义一个map集合用来存放我们在数组中找过的元素 数组中的元素作为key 索引作为值
        // Map<Integer, Integer> map = new HashMap();

        // //数组每个元素作为key元素对应的索引作为值先存到map中去
        // // 遍历数组，并在map中寻找是否有匹配的key
        // for (int i = 0; i < nums.length; i++) {
        //     //目标值减去数组中的一个数，则为要在数组中找的第二个所需要的数
        //     int temp = target - nums[i];

        //     if (map.containsKey(temp)) {
        //         //在map中找到匹配的第二个数了设置结果返回
        //         res[0] = map.get(temp);
        //         res[1] = i;
        //     }
        //     // 如果没找到匹配对，就把访问过的元素和下标加入到map中
        //     map.put(nums[i], i);
        // }

        // return res;

        //方法二：
        //定义一个map集合用来存放我们在数组中找过的元素 数组中的元素作为key 索引作为值
        Map<Integer, Integer> map = new HashMap();

        //数组每个元素作为key元素对应的索引作为值先存到map中去
        // 遍历数组，并在map中寻找是否有匹配的key
        for (int i = 0; i < nums.length; i++) {
            //目标值减去数组中的一个数，则为要在数组中找的第二个所需要的数
            int temp = target - nums[i];

            if (map.containsKey(temp)) {
                //在map中找到匹配的第二个数了设置结果返回
                return new int[]{map.get(temp), i};
            }else {
                // 如果没找到匹配对，就把访问过的元素和下标加入到map中
                map.put(nums[i], i);
            }

        }

        return null;
    }
}
